import { apiRequest } from '@/utils/apiRequest'
import { ElMessage } from 'element-plus'

/**
 * 获取用户列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.pageSize - 每页条数
 * @param {string} [params.username] - 用户名
 * @param {string} [params.role] - 角色
 * @param {string} [params.status] - 状态
 * @returns {Promise<{data: {items: Array, total: number}}>}
 */
export const getUserList = async (params) => {
  try {
    let url = '/api/Users'
    
    // 构建查询参数
    const queryParams = new URLSearchParams()
    queryParams.append('page', params.page)
    queryParams.append('pageSize', params.pageSize)
    
    if (params.username) {
      queryParams.append('username', params.username)
    }
    
    if (params.role && params.role !== '-1') {
      queryParams.append('role', params.role)
    }
    
    if (params.status && params.status !== '-1') {
      queryParams.append('status', params.status)
    }
    
    // 如果有查询参数，拼接URL
    if (queryParams.toString()) {
      url = `${url}?${queryParams.toString()}`
    }
    
    // 调用真实API
    const response = await apiRequest.get(url)

    // 处理ASP.NET Core返回的格式
    const dataArray = response.data?.$values || response.data || []
    // 格式化返回数据以匹配前端期望的结构
    // 确保status字段是数字类型
    const formattedData = dataArray.map(user => ({
      ...user,
      status: Number(user.status) // 确保status是数字类型
    }))
    return {
      data: {
        items: formattedData,
        total: formattedData.length
      }
    }
  } catch (error) {
    console.error('Failed to fetch users:', error)
    ElMessage.error('获取用户列表失败: ' + error.message)
    throw error
  }
}

/**
 * 新增用户
 * @param {Object} userData - 用户数据
 * @param {string} userData.username - 用户名
 * @param {string} userData.email - 邮箱
 * @param {string} userData.role - 角色
 * @param {number} userData.status - 状态
 * @returns {Promise<any>}
 */
export const createUser = async (userData) => {
  try {
    const response = await apiRequest.post('/api/Users', userData)
    ElMessage.success('新增用户成功')
    return response.data
  } catch (error) {
    console.error('Failed to create user:', error)
    ElMessage.error('新增用户失败: ' + error.message)
    throw error
  }
}

/**
 * 更新用户信息
 * @param {string} id - 用户ID
 * @param {Object} userData - 用户数据
 * @param {string} userData.username - 用户名
 * @param {string} userData.email - 邮箱
 * @param {string} userData.role - 角色
 * @param {number} userData.status - 状态
 * @returns {Promise<{success: boolean}>}
 */
export const updateUser = async (id, userData) => {
  try {
    if (!id) {
      throw new Error('用户ID不能为空')
    }
    
    // 格式化请求参数，只包含必要字段
    const formattedParams = {
      username: userData.username,
      email: userData.email,
      role: userData.role,
      status: Number(userData.status) // 确保status是数字类型
    }
    
    
    // 调用真实API
    const response = await apiRequest.put(`/api/Users/${id}`, formattedParams, {
      headers: { 'Content-Type': 'application/json' },
      validateStatus: (status) => true // 确保所有状态码都被返回
    })
    
    ElMessage.success('更新用户成功')
    return { success: response.status >= 200 && response.status < 300 }
  } catch (error) {
    console.error(`Failed to update user ${id}:`, error)
    const errorMessage = error.response?.data?.message || error.message
    ElMessage.error('更新用户失败: ' + errorMessage)
    throw error
  }
}

/**
 * 删除用户
 * @param {string} id - 用户ID
 * @returns {Promise<{success: boolean}>}
 */
export const deleteUser = async (id) => {
  try {
    if (!id) {
      throw new Error('用户ID不能为空')
    }
    
    // 调用真实API
    await apiRequest.delete(`/api/Users/${id}`)
    ElMessage.success('删除用户成功')
    return { success: true }
  } catch (error) {
    console.error(`Failed to delete user ${id}:`, error)
    ElMessage.error('删除用户失败: ' + error.message)
    throw error
  }
}

/**
 * 更新用户状态
 * @param {string} id - 用户ID
 * @param {boolean|Object} statusValue - 状态值或包含状态的对象
 * @returns {Promise<{success: boolean}>}
 */
export const updateUserStatus = async (id, statusValue) => {
  try {
    if (!id) {
      throw new Error('用户ID不能为空')
    }
    // 提取并确保状态值是布尔类型
    const status = typeof statusValue === 'object' ? !!statusValue.status : !!statusValue;
    
    
    // 直接发送布尔值作为请求体
    const response = await apiRequest.patch(`/api/Users/${id}/status`, status, {
      headers: { 'Content-Type': 'application/json' },
      validateStatus: (status) => true // 确保所有状态码都被返回
    })
    
    ElMessage.success('更新用户状态成功')
    // 对于204 No Content响应，认为成功
    return { success: response.status === 204 }
  } catch (error) {
    console.error(`Failed to update status for user ${id}:`, error)
    
    ElMessage.error('更新用户状态失败: ' + (error.response?.data?.message || error.message))
    throw error
  }
}